package com.whzykj.jfinal;

import com.alibaba.druid.filter.stat.StatFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.render.ViewType;
import com.whzykj.common.DictCache;
import com.whzykj.common.SystemRunParamCache;
import com.whzykj.ctrl.AcctController;
import com.whzykj.ctrl.ActivityController;
import com.whzykj.ctrl.AliPayController;
import com.whzykj.ctrl.AppInterfaceController;
import com.whzykj.ctrl.ArticleController;
import com.whzykj.ctrl.CheckAccountController;
import com.whzykj.ctrl.CustomerController;
import com.whzykj.ctrl.DictController;
import com.whzykj.ctrl.GoodsController;
import com.whzykj.ctrl.IndexController;
import com.whzykj.ctrl.NoticeController;
import com.whzykj.ctrl.OrderController;
import com.whzykj.ctrl.ReturnController;
import com.whzykj.ctrl.RunparamController;
import com.whzykj.ctrl.StationController;
import com.whzykj.ctrl.UploadController;
import com.whzykj.ctrl.UserController;
import com.whzykj.ctrl.WapController;
import com.whzykj.ctrl.WxPayController;
import com.whzykj.job.QuartzPlugin;

public class GlobalConfig extends JFinalConfig {

	@Override
	public void configConstant(Constants me) {
		me.setDevMode(PropKit.use("config.properties").getBoolean("devMode"));
		// me.setError404View("/error/404.html");
		// me.setError500View("/error/500.html");
		me.setViewType(ViewType.JSP);
	}

	@Override
	public void configRoute(Routes me) {
		me.add("/", IndexController.class, "/"); 			// 域名根路径访问信息
		me.add("/admin/index", IndexController.class); 		// 网站后台首页访问路径
		me.add("/admin/user", UserController.class); 		// 用户权限访问路径
		me.add("/admin/station",StationController.class);	// 站点信息访问路径
		me.add("/mobile", AppInterfaceController.class); 	// 数据接口服务
		me.add("/admin/customer",CustomerController.class);	// 客户信息访问路径
		me.add("/admin/notice",NoticeController.class);		// 公告信息访问路径
		me.add("/order",OrderController.class);				// 订单信息访问路径
		me.add("/goods",GoodsController.class);				// 商品信息访问路径
		me.add("/admin/article",ArticleController.class);	// 文章信息访问路径
		me.add("/wap",WapController.class);					// 移动访问路径
		me.add("/admin/runparam",RunparamController.class);	// 运行参数访问路径
		me.add("/upload", UploadController.class,"page/upload");	// 文件上传访问路径
		
		me.add("/admin/acct",AcctController.class);	        // 账户信息访问路径
		me.add("/admin/activity",ActivityController.class);	        // 账户信息访问路径
		me.add("/admin/checkacct",CheckAccountController.class);	        // 账户信息访问路径
		
		me.add("/dict",DictController.class);	       		 // 账户信息访问路径
		me.add("/admin/return",ReturnController.class);		 // 退赔访问路径
		
		me.add("/wxpay",WxPayController.class);		 // 微信回调
		me.add("/alipay",AliPayController.class);    // 支付宝回调
		
	}

	@Override
	public void configPlugin(Plugins me) {
		// 配置C3p0数据库连接池插件
		// C3p0Plugin c3p0Plugin=new
		// C3p0Plugin(PropKit.use("jdbc.properties").get("jdbc.url"),PropKit.use("jdbc.properties").get("jdbc.user"),PropKit.use("jdbc.properties").get("jdbc.password"));
		// me.add(c3p0Plugin);

		// 配置数据库连接池插件
		Prop p = PropKit.use("jdbc.properties");
		DruidPlugin druidPlugin = new DruidPlugin(p.get("jdbc.url"),p.get("jdbc.user"), p.get("jdbc.password"));
		druidPlugin.addFilter(new StatFilter());
		me.add(druidPlugin);
		
		// 加载缓存插件
		me.add(new EhCachePlugin());

		AutoTableBindPlugin autoTableBindPlugin = new AutoTableBindPlugin(druidPlugin, TableNameStyle.LOWER);
		autoTableBindPlugin.setShowSql(true);
		autoTableBindPlugin.setContainerFactory(new CaseInsensitiveContainerFactory());
		me.add(autoTableBindPlugin);
		
		ActiveRecordPlugin  arp =  new ActiveRecordPlugin(druidPlugin);
		arp.setContainerFactory(new CaseInsensitiveContainerFactory(true));   //设置大小写不敏感
		
		//定时任务(测试时关闭，部署时一定要记得加上去)
//		QuartzPlugin quarts=QuartzPlugin.getInstance();
//		me.add(quarts);
	}

	@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stub
		me.add(new AuthInterceptor());
	}

	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub
		me.add(new AuthHandler());
	}
	
	/**
	 * 系统启动完成后初始化公共数据
	 */
	public void afterJFinalStart(){
		//数据字典明细
		DictCache.cache.loadCache();
		SystemRunParamCache.cache.loadCache();
	}

}
